let CreateSeparation = require('../wukong/CreateSeparation')
let AddSubAccount = require('./AddSubAccount')
const tool = require('../../../mods/tool')

function registerWx () {

    let cs = new CreateSeparation()
    let asa = new AddSubAccount()
    let t = new tool()
    // print(cs.idData.launch)
    
    this.idData = {
        tcImg : 'tcOperation',
        phoneEditId : 'gc6',
        next : 'eb',
        //返回上一页
        back : 'ivv',
        //选择地区
        selectRegion : 'bvd',
        //出生日期
        dateOfBirth : 'ab7',
        //年
        year : 'date_picker_header_year',
        //年列表
        yearList : 'date_picker_year_picker',
        //上个月
        prev : 'prev',
        //下个月
        next : 'next',
        //日期显示
        dateView : 'date_picker_header_date',
        //日期父控件
        datePager : 'day_picker_view_pager',
        //选择头像
        selectHeadP : 'htf'
    }

    this.stringData = {
        phoneLogin : '手机号登录',
        phoneEditText : '手机号',
        next : '下一步',
        submitting : '提交中…',
        verify : '验证中…',
        numberCode : '请输入验证码',
        ncodeEditText : '验证码',
        needVerification : '你正在使用新设备登录企业微信，为保障帐号安全，请选择一种验证方式，以确保是本人操作")text("你正在使用新设备登录企业微信，为保障帐号安全，请选择一种验证方式，以确保是本人操作',
        needVerification_contain : '你正在使用新设备登录企业微信',
        selectRegion : '选择地区',
        ok : '确定',
        confirm : '确认',
        agree : '同意',
        album : '从相册中选取',
        getInto : '进入',
        message : '消息',
        workStatus : '选择工作身份',


    }

    this.numberData = {
        //等待验证码时间
        waitCode : 5000,

        //下滑延迟
        scrollSleep : 1000
        
    }


    registerWx.prototype._readName_ = function (line) {
        let name = t.readLine(this.namesPath, line)
        if (name) {
            name = name.split('-')[1].trim()
        }
        return name
    }

    registerWx.prototype._readLink_ = function (line) {
        let link = t.readLine(this.apisPath, line)
        if (link) {
            link = link.split('-')[1].trim()
        }
        return link
    }

    registerWx.prototype._readPhone_ = function (line) {
        let phone = t.readLine(this.apisPath, line)
        if (phone) {
            phone = phone.split('-')[0].trim()
        }
        return phone
    }

    registerWx.prototype._getApi_ = function (api) {
        api = api.trim()
        print(api)
        let res = http.get(api)
        if (res.statusCode == 200) {
            return {
                body : res.body.string(),
                code : res.statusCode,
                message : 'ok'
            }
        } else {
            return {
                body : null,
                message : '状态码错误',
                code : res.statusCode
            }
        }

    }

    registerWx.prototype._openContainer_ = function (st, view) {

        if (text(this.stringData.phoneLogin).exists()) {
            print('手机号登录界面')
            return 'login'
        } else if (text(this.stringData.message).exists()) {
            print('企业微信首页')
            return 'home'
        } else {
            view.click()
            sleep(st)
            print('继续打开')
            
            let r= this._openContainer_(st, view)
            if (r) {
                return r
            }
        }
        
    }

    registerWx.prototype._getVcode = function (api) {
        let ncode = this._getApi_(api)
        if (ncode.code != 200) {
            print(ncode)
            return null
        }
        print(ncode.body)
        ncode = JSON.parse(ncode.body).message
        
        //开始正则匹配
        if (!ncode) {
            print('ncode解析失败')
            return null
        }
        
        ncode = ncode.match(/\d{6}/)
        if (!ncode) {
            print('ncode正则匹配失败')
            return null
        }
        return ncode[0]
        
    }

    registerWx.prototype._getRandomYear = function () {
        print('随机取一个年份')
        let min = Number(this.dete_birth.split('-')[0])
        let max = Number(this.dete_birth.split('-')[1])
        return random(min, max)
    }

    registerWx.prototype._selectMonth_ = function () {
        let r = random(-this.random_month, this.random_month)
        if (r == 0) {
            print('不用调时间')
            return null
        } else if (r < 0) {
            print('往前面调')
            for (let i = 0;i < Math.abs(r); i++) {
                while(!id(this.idData.prev).findOne().click());
                sleep(random(200, 500))
            }
        } else if (r > 0) {
            print('往后面调')
            for (let i = 0;i < Math.abs(r); i++) {
                while(!id(this.idData.next).findOne().click());
                sleep(random(200, 500))
            }
        }
        return null

    }

    registerWx.prototype._selectDateBirth_ = function () {
        //选择出生日期
        print('点击出生日期')
        while(!id(this.idData.dateOfBirth).findOne().click());
        text(this.stringData.ok).waitFor()
        print('点击年份')
        while(!id(this.idData.year).findOne().click());
        let yearnum = this._getRandomYear().toString()
        print('选择年份为：%d', yearnum)

        while (1) {
            let yearList = id(this.idData.yearList).findOne()

            if (yearList.findOne(text(yearnum))) {
                break
            } else {
                //下滑
                while(!yearList.scrollBackward());
                sleep(this.numberData.scrollSleep)
                
            }
        }
        
        print('点击年份')
        while(!text(yearnum).findOne().click());
        print('开始选择月份')
        sleep(this.numberData.scrollSleep)
        this._selectMonth_()
        print('开始选择日期')
        //下滑日期列表
        while(className("android.widget.ScrollView").scrollable(true).findOne().scrollForward());

        let dpager = id(this.idData.datePager).findOne().child(1)
        if (!dpager) {
            print('dpager不存在')
            return null
        }

        let dateView = dpager.child(random(0, 28))
        if (!dateView) {
            print('dateView不存在')
            return null
        }

        print(dateView.desc())
        print('点击日期')
        click(dateView.bounds().centerX(), dateView.bounds().centerY())
        
    }

    //隐私政策
    registerWx.prototype._privacyPolicy = function () {
        //同意隐私政策
        print('第一次确认')
        while(!text(this.stringData.confirm).findOne().click());
        sleep(random(5555, 6666))
        text(this.stringData.agree).waitFor()

        while(!text(this.stringData.agree).findOne().click());
        // print('第二次同意')
        // sleep(random(5555, 6666))
        // text(this.stringData.agree).waitFor()
        
        // while(!text(this.stringData.agree).findOne().click());

        // print('第三次同意')
        // sleep(random(5555, 6666))
        // text(this.stringData.getInto).waitFor()
        
        // while(!text(this.stringData.agree).findOne().click());


    }

    //选择头像
    registerWx.prototype.selectHeadPortrait = function () {
        print('开始选择头像')
        while(!id(this.idData.selectHeadP).findOne().click());
        text(this.stringData.album).waitFor()
        print('从相册选择照片')
        while(!text(this.idData.selectHeadP).findOne().parent().parent().parent().click());

        
    }



    //注册流程
    registerWx.prototype._initRegister_ = function () {
        print('开始正式注册')
        //手机号登录

        if (text(this.stringData.phoneLogin).exists()) {
            while(!text(this.stringData.phoneLogin).findOne().click());
        }

        while (1) {

            text(this.stringData.next).waitFor()

            let name = this._readName_(this.index)
            let phone =this._readPhone_(this.index)
            let link = this._readLink_(this.index)
            print("name:%s\nphone:%s\nlink:%s", name, phone, link)

            if (!name || !phone || !link) {
                print('名字、手机号或者连接不存在')
                return false
            }
            //读完就删
            t.removeLine(this.namesPath,this.index)
            t.removeLine(this.apisPath,this.index)
            //格式化
            name = name.trim()
            phone = phone.trim()
            link = link.trim()

            //设置时区
            if (id(asa.idData.country_number).findOne().text() != asa.stringData.country_number) {
                //选择时区
    
                while(!id(asa.idData.sq).findOne().click());
                asa._selectTimeZone_()
            }
            
            print('输入手机号')
            while(!id(this.idData.phoneEditId).findOne().setText(phone));
            
            print('下一步')
            while(!text(this.stringData.next).findOne().click());
            
            print('下一步')
            // text(this.stringData.submitting).waitFor()
            // while(text(this.stringData.submitting).exists());
            
            text(this.stringData.numberCode).waitFor()
            print(this.stringData.numberCode)
            sleep(this.numberData.waitCode)

            let vCode = this._getVcode(link)
            print('输入验证码%s', vCode)
            if (!vCode) {
                //返回并重新注册
                print('返回并重新注册')
                while(!id(this.idData.back).findOne().click());
                text(this.stringData.phoneLogin).waitFor()
                print('返回成功，延迟十秒钟')
                sleep(10 * 1000)
                print('重新输入手机号')
                
                continue
                
            }
            while(!text(this.stringData.ncodeEditText).findOne().setText(vCode));
            print('下一步')
            while(!text(this.stringData.next).findOne().click());
            
            //不知道是提交中还是验证中
            //应该是验证中
            // text(this.stringData.submitting).waitFor()
            // while(text(this.stringData.submitting).exists());
            sleep(this.numberData.waitCode)
            //判断是否是正常注册
            let yz = false
            while (1) {
                if (textContains(this.stringData.needVerification_contain).exists()) {
                    print('需要验证')
                    //换个账号
                    yz = true
                    //创建一个数据库存放这些不能用的数据，删除数据
                    break
                } else if (text(this.stringData.selectRegion).exists()) {
                    print('不需要验证')
                    yz = false
                    break
                } else if (text(this.stringData.workStatus).exists()) {
                    print('要选工作身份')
                    let gzsf = text(this.work).findOne(10 * 1000)
                    if (gzsf) {
                        toastLog(this.stringData.workStatus)
                        while(!gzsf.parent().parent().parent().parent().parent().click());
                        print('选择工作身份成功')
                        yz = false
                        break

                    } else {
                        toastLog('没有找到工作身份')
                        // 省汝纹商贸
                        yz = true
                        break
                    }
                    
                } else if (text(this.stringData.getInto).exists()) {
                    print('顶号登录')
                    yz = false
                    break
                } else {
                    print('----')
                    sleep(1000)
                }
            }

            if (yz) {
                while(!id(this.idData.back).findOne().click());
                continue
            } else {
                break
            }

        }

        if (text(this.stringData.selectRegion).exists()) {
            print('开始选择地区')
            while(!id(this.idData.selectRegion).findOne().click());

            //选择时区
            asa._selectTimeZone_()

            //开始选择出生日期
            this._selectDateBirth_()

            //确定
            while(!text(this.stringData.ok).findOne().click());
        }

        //注册后半段
        print('下一步')
        sleep(this.numberData.scrollSleep)

        //如果是进入 就直接进入
        if (text(this.stringData.next).exists()) {
            while(!text(this.stringData.next).findOne().click());
        
            //隐私政策
            print('隐私政策')
            this._privacyPolicy()

            //选择头像
    
        } else if (text(this.stringData.getInto).exists()) {
            print('直接进入')
        }

        //等待进入出现
        text(this.stringData.getInto).waitFor()
        print('进入')
        while(!text(this.stringData.getInto).findOne().click());
        
        //判断一下是否进入
        text(this.stringData.message).waitFor()
        toastLog('注册成功')

        return true

    }

    //返回兼容线程
    registerWx.prototype._compatibleThread_ = function () {
        let launch = cs.idData.launch
        let closeWindow = cs.idData.closeWindow
        let agree = this.stringData.agree
        //兼容线程
        return threads.start(function () {
            while (1) {
                if (id(launch).exists()) {
                    while(!id(launch).findOne().click());
                } else if (id(closeWindow).exists()) {
                    while(!id(closeWindow).findOne().click());

                } else if (text(agree).exists()) {
                    while(!text(agree).findOne().click());
                }
                
                sleep(1000)
            }
        })
    }
    
    //内存回收
    registerWx.prototype._free_ = function (app_name) {
        //跑内存回收流程
        print('回到悟空多开分身')
        // app.launchApp(cs.stringData.appName_2)
        do {
            back()
            sleep(4000)
        }while(!text(cs.stringData.home).exists());
        // sleep(this.numberData.scrollSleep)
        print('释放内存阶段')
        //重新获取需要操作的容器
        let cView = text(app_name).findOne()
        
        if (cView) {
            let settingView = cView.parent().parent().findOne(id(cs.idData.setting))
            // print(settingView)
            
            print('点击设置')
            while(!settingView.click());
            sleep(cs.numberData.sleep)
            print('停止运行')
            while(!text(cs.stringData.stopRun).findOne().parent().click());
            //卸载
            // while(!text(cs.stringData.uninstall).findOne().parent().click());
            // text(cs.stringData.alertTitle).waitFor()
            // while(!text(cs.stringData.delete).findOne().click());
            sleep(2000)
            print('停止运行成功')
            return true
        } else {
            print('没有找到settingView')
            return false
        }
    }

    //获取一行文本
    
    //注册主函数
    registerWx.prototype.run = function () {
        print('开始注册')
        console.show()

        text(cs.stringData.home).waitFor()
        toastLog('进入分身成功，等待五秒钟')
        sleep(5000)
        //新建兼容线程,后面记得中断掉
        let compatibleaThread = this._compatibleThread_()

        
        //创建循环,作用域悟空多开分身的容器
        for (this.start_num; this.start_num < this.sum; this.start_num++) {
            // print('打开第%d个容器', this.start_num+1)
            //容器的盒子
            let boxView = id(cs.idData.box).findOne()
            // print('该容器有%d个盒子', boxView.childCount())

            if (boxView.childCount() == 0) {
                print('容器盒子里没有容器')
                break
            }
            


            //新建容器组件
            let app_name = text("企业微信  "+this.start_num).findOnce()

            if (!app_name) {
                print('%d号分身容器不存在', this.start_num)
                // continue
                //下滑刷新list
                print('下滑刷新！')
                if (!boxView.scrollForward()) {
                    print('下滑失败')
                    break
                }
                sleep(1000)
                // boxView = id(cs.idData.box).findOne()
                continue

            } else {
                containerView = app_name.parent().parent()
            }

            //获取应用名称文本
            app_name = app_name.text()
            toastLog('打开【'+ app_name+'】')
            
            //开始点击该分身
            // while(!containerView.click());

            //判断是否成功进入，换个逻辑
            let activityStatus = this._openContainer_(2000, containerView)

            print('activityStatus:%s', activityStatus)
            if (activityStatus == 'login') {
                toastLog('开始注册啊d')
                this._initRegister_()
            } else if (activityStatus == 'home') {
                print('进入微信主页了')
            }
            
            //内存释放
            if (!this._free_(app_name)) {
                print('内存释放失败')
                break
            }
            sleep(3000)
        }

        //中断兼容线程
        if (compatibleaThread.isAlive()) compatibleaThread.interrupt()
        toastLog('注册任务完成！！！')
        //输出总结报告
    }

}

module.exports = registerWx